﻿namespace BM.Tools.WebControls.MForm.Controls.Helper
{    
    using System.ComponentModel;
    using System.Web.Script.Serialization;

    /// <summary>
    /// Creates a JSON serialized representation of any object.
    /// </summary>
    internal class JsonConverter : TypeConverter
    {
        /// <summary>
        /// Returns whether this converter can convert the object to the specified type, using the specified context.
        /// </summary>
        /// <returns>
        /// true if this converter can perform the conversion; otherwise, false.
        /// </returns>
        /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context. </param><param name="destinationType">A <see cref="T:System.Type"/> that represents the type you want to convert to. </param>
        public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)
        {
            return destinationType == typeof(string);
        }

        /// <summary>
        /// Converts the given value object to the specified type, using the specified context and culture information.
        /// </summary>
        /// <returns>
        /// An <see cref="T:System.Object"/> that represents the converted value.
        /// </returns>
        /// <param name="context">
        /// An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context. 
        /// </param>
        /// <param name="culture">
        /// A <see cref="T:System.Globalization.CultureInfo"/>. If null is passed, the current culture is assumed. 
        /// </param>
        /// <param name="value">
        /// The <see cref="T:System.Object"/> to convert. 
        /// </param>
        /// <param name="destinationType">
        /// The <see cref="T:System.Type"/> to convert the value parameter to. 
        /// </param>
        /// <exception cref="T:System.NotSupportedException">
        /// The conversion cannot be performed. 
        /// </exception>
        /// <exception cref="T:System.ArgumentNullException">
        /// The destinationType parameter is null. 
        /// </exception>
        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType)
        {
            return new JavaScriptSerializer().Serialize(value);
        }
    }
}
